package com.zhangchenzhou.room.database;

import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Embedded;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.Ignore;
import android.arch.persistence.room.PrimaryKey;

/**
 * Created by 63453 on 2018/3/24.
 */
//@Entity用来注解一个实体类，对应数据库一张表  默认类名就是数据库表名，如果需要重新定义表名则需要添加 tableName = "TableName_User"
//1.指定参数的形式指定主键 @Entity(primaryKeys = {"firstName", "lastName"})
//2.指定参数的形式指定索引  --  加快查询速度 @Entity(indices = {@Index("name"), @Index("last_name", "address")})
//3.设定字段唯一性  有时，数据库中某些字段或字段组必须是唯一的。通过将@Index的unique 设置为true，可以强制执行此唯一性属性。  防止表有两行包含FirstName和LastName列值相同  eg:@Entity(indices = {@Index(value = {"first_name", "last_name"},unique = true)})
//4.外键 @Entity(foreignKeys = @ForeignKey(entity = User.class,parentColumns = "id",childColumns = "user_id"))
@Entity(tableName = "TableName_User")
public class User {
    //用来注解主键  每个实体必须至少定义1个字段作为主键,即使只有一个成员变量
    @PrimaryKey
    public long userId;
    //如果我们需要重命名成员数据存储在数据库中的字段名称，则需要用到@ColumnInfo注解
    @ColumnInfo(name = "user_name")
    public String name;
    //下面默认保存在数据库中可以不写注解
    public int sex;
    public int age;

    //默认情况 Room会为每一个成员属性在数据库中创建对应的字段，如果不需要保存，则用Ignore注解
    @Ignore
    public String otherInfo;

//    @Embedded//强制对象嵌套
//    public Address address;

    public User() {
    }

    public User(long userId, String name, int sex, int age, String otherInfo) {
        this.userId = userId;
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.otherInfo = otherInfo;
    }
}